package com.leetcode.蓝桥杯.十二届国赛;

import java.time.Duration;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;

/**
 * 如果一个日期中年月日的各位数字之和是完全平方数，则称为一个完全日期。
例如:2021年6月5日的各位数字之和为2＋0＋2＋1＋6＋5= 16，而16是一个完全平方数，它是4的平方。所以2021年6月5日是一个完全日期。
例如:2021年6月23日的各位数字之和为2＋0＋2＋1＋6＋2＋3=16，是一个完全平方数。所以2021年6月23日也是一个完全日期。
请问，从2001年1月1日到2021年12月31日中，一共有多少个完全日期?

 * @author LZF
 *
 */
public class 填空题3 {
	/**
	 * 三重循环遍历 年、月、日
	 * 注意：闰年2月有29天，非闰年有28天
	 * 闰年判定：能被4整除但不能被100整除，或者能被400整除的是闰年
	 */
	private static int[] days = {0,31,28,31,30,31,30,31,31,30,31,30,31};//days[3]=31，表示3月有31天
	private static int cnt = 0;
	public static void main(String[] args) {
		for(int y = 2001;y <= 2021;y++) {
			if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)//闰年
				days[2] = 29;
			else 
				days[2] = 28;
			for(int m = 1;m <= 12;m++) {
				for(int d = 1;d <= days[m];d++) {
					int total = digitSum(y) + digitSum(m) + digitSum(d);
					if((int)Math.sqrt(total) * (int)Math.sqrt(total) == total)
						cnt++;
				}
			}
		}
		System.out.println(cnt);
	}
	
	//求num的每一位数的总和 
	public static int digitSum(int num) {
		int sum = 0;
		while(num != 0) {
			sum += num % 10;
			num /= 10;
		}
		return sum;
	}
}
